import router from './router'
import store from './store'
import { Message } from 'element-ui'
import NProgress from 'nprogress' // progress bar
import 'nprogress/nprogress.css' // progress bar style
import { getToken } from '@/utils/auth' // get token from cookie
import getPageTitle from '@/utils/get-page-title'

NProgress.configure({ showSpinner: false }) // NProgress Configuration

const whiteList = ['/login2','/login'] // no redirect whitelist  '/login'

router.beforeEach(async(to, from, next) => {
  // start progress bar
  NProgress.start()//显示进度条

  // set page title设置页面标题
  // document.title = getPageTitle(to.meta.title)
  document.title = '石油设备信息管理系统'
  // determine whether the user has logged in
  const hasToken = getToken()//来源于  @/utils/auth ~ @/store/user.js ~ @/api/user.js
  if (hasToken) {
    console.log('有token，我进来了！')
    if (to.path === '/login2') {//核心在这里！
      // if is logged in, redirect to the home page
      next({ path: '/' })
      NProgress.done()//关闭进度条
    } else {
      // determine whether the user has obtained his permission roles through getInfo
      const hasRoles =store.getters.roles && store.getters.roles.length>0 /*拿到token后，没有调用getInfo,所以先进入else.*/
      if(hasRoles){
        next()
      }else{
        try{
          const {role}=await  store.dispatch('user/getInfo')/*拿到roles; 且存储到state中，可以有getters拿到。*/

          var roles=[role]/*应该是一个数组！*/

          const accessRoutes=await  store.dispatch('permission/generateRoutes',roles)/*弄成role可以登进去,但是对象就不行*/

          router.addRoutes(accessRoutes)/*无限循环是因为没有注释这一句话*/

          console.log({...to})//打印出来的就是{name:"device2",meta:{...},path:"/device"，hash:"",query:{...}}
          console.log('我在try中')

          next({...to,replace:true})/*无限循环是因为roles一直没有获取到，一直执行的else*/
        }catch (error) {
          // remove token and go to login page to re-login
          await store.dispatch('user/resetToken')//调用store里面的方法，然后又会调用resetToken这个api中的方法。
          Message.error(error || 'Has Error')
          next(`/login2?redirect=${to.path}`)/*出错之类的到这里来吧*/
          NProgress.done()//关闭进度条
        }
      }
      /*
      const hasGetUserInfo = store.getters.name//使用到vuex的内容，获取state里面的值。
      if (hasGetUserInfo) {
        next()
      } else {
        try {
          // get user info
          // console.log("has token else")
          await store.dispatch('user/getInfo')//调用store里面的方法，然后调用getInfo这个api中的方法。

          next()
        } catch (error) {
          // remove token and go to login page to re-login
          await store.dispatch('user/resetToken')//调用store里面的方法，然后又会调用resetToken这个api中的方法。
          Message.error(error || 'Has Error')
          next(`/login?redirect=${to.path}`)
          NProgress.done()//关闭进度条
        }
      }*/
    }//end of else
  } else {
    /* has no token*/

    if (whiteList.indexOf(to.path) !== -1) {
      // in the free login whitelist, go directly
      console.log("哈哈哈哈  whiteList.indexOf(to.path) !== -1")
      console.log("to.path:"+to.path)
      next()//一开始就默认要redire到/login， 那个to.path就是login。==>一开始哪个地方就让to成为了'/login'
    } else {
      // other pages that do not have permission to access are redirected to the login page.
      console.log("我进入了has no token的else{}")
      next(`/login2?redirect=${to.path}`)//会起到作用，但是那个console.log为啥不生效？因为刷新了页面！【】
      NProgress.done()
    }
  }
})

router.afterEach(() => {
  // finish progress bar
  NProgress.done()//关闭进度条
})
